///////////////////////////////////////////////////////////
//  UIFactory.h
//  Implementation of the Class UIFactory
//  Created on:      21-Sep-2013 11:36:36 AM
//  Original author: Jakkaphan Aiemcharoenjit
///////////////////////////////////////////////////////////

#if !defined(EA_78BFD28D_71A6_4fdc_8A75_16127FA8E713__INCLUDED_)
#define EA_78BFD28D_71A6_4fdc_8A75_16127FA8E713__INCLUDED_

#include "IwNUI.h"
#include "CMainWindow.h"
#include "CCheckListView.h"
#include "CCreateCheckListView.h"
#include "CChoicesView.h"
#include "CPreviewDetailView.h"
#include "CSendMailView.h"
#include "CTemplateView.h"
#include "CCreateTemplateView.h"
#include "CCreateChoiceView.h"
#include "CCreateItemView.h"
#include "CSaveView.h"
#include "CAboutView.h"

namespace UI
{
  //class CMainWindow;
  //class CCheckListView;
  //class CCreateCheckListView;
  //class CChoicesView;
  //class CPreviewDetailView;
  //class CSendMailView;
  //class CTemplateView;
  //class CCreateTemplateView;
  //class CCreateChoiceView;
  //class CCreateItemView;

  /**
    * Auto pointer to a CMainWindow
    */
  typedef IwNUI::CSharedPtr<CMainWindow> CMainWindowPtr;

  /**
    * Auto pointer to a CCheckListView
    */
  typedef IwNUI::CSharedPtr<CCheckListView> CCheckListViewPtr;

  /**
    * Auto pointer to a CCreateCheckListView
    */
  typedef IwNUI::CSharedPtr<CCreateCheckListView> CCreateCheckListViewPtr;

  /**
    * Auto pointer to a CChoicesView
    */
  typedef IwNUI::CSharedPtr<CChoicesView> CChoicesViewPtr;

  /**
    * Auto pointer to a CPreviewDetailView
    */
  typedef IwNUI::CSharedPtr<CPreviewDetailView> CPreviewDetailViewPtr;

  /**
    * Auto pointer to a CSendMailView
    */
  typedef IwNUI::CSharedPtr<CSendMailView> CSendMailViewPtr;

  /**
    * Auto pointer to a CTemplateView
    */
  typedef IwNUI::CSharedPtr<CTemplateView> CTemplateViewPtr;

  /**
    * Auto pointer to a CCreateTemplateView
    */
  typedef IwNUI::CSharedPtr<CCreateTemplateView> CCreateTemplateViewPtr;

  /**
    * Auto pointer to a CCreateChoiceView
    */
  typedef IwNUI::CSharedPtr<CCreateChoiceView> CCreateChoiceViewPtr;

  /**
    * Auto pointer to a CCreateItemView
    */
  typedef IwNUI::CSharedPtr<CCreateItemView> CCreateItemViewPtr;

  /**
    * Auto pointer to a CSaveItemView
    */
  typedef IwNUI::CSharedPtr<CSaveView> CSaveViewPtr;

  /**
  * Auto pointer to a CAboutView
  */
  typedef IwNUI::CSharedPtr<CAboutView> CAboutViewPtr;

class UIFactory
{
protected:
  UIFactory(){}

public:
  /**
    * Create a new main window
    * @return pointer to the main window
  */
	//static CMainWindowPtr CreateMainWindow();
  static CMainWindowPtr CreateMainWindow(IwNUI::CAppPtr app);
  /**
    * Create a new checklist view
    * @param main window
    * @return pointer to the checklist view
  */
	static CCheckListViewPtr CreateCheckListView(Data::IPages* checkListPages, IWindowDirector* parentWindow);
  /**
    * Create a new createchecklist view
    * @param main window
    * @return pointer to the createchecklist view
  */
	static CCreateCheckListViewPtr CreateCreCheckListView(IWindowDirector* parentWindow);
  /**
    * Create a new choices view
    * @param main window
    * @return pointer to the choices view
  */
	static CChoicesViewPtr CreateChoicesView(IWindowDirector* parentWindow);
  /**
    * Create a new previewdetail view
    * @param main window
    * @return pointer to the previewdetail view
  */
	static CPreviewDetailViewPtr CreatePreviewDetailView(IWindowDirector* parentWindow);
  /**
    * Create a new sendmail view
    * @param main window
    * @return pointer to the sendmail view
  */
	static CSendMailViewPtr CreateSendMailView(IWindowDirector* parentWindow);
  /**
    * Create a new template view
    * @param main window
    * @return pointer to the template view
  */
	static CTemplateViewPtr CreateTemplateView(Data::IPages* templatePages, IWindowDirector* parentWindow);
  /**
    * Create a new createtemplate view
    * @param main window
    * @return pointer to the createtemplate view
  */
	static CCreateTemplateViewPtr CreateCreTemplateView(IWindowDirector* parentWindow);
  /**
    * Create a new createchoice view
    * @param main window
    * @return pointer to the createchoice view
  */
	static CCreateChoiceViewPtr CreateCreChoiceView(IWindowDirector* parentWindow);
  /**
    * Create a new createitem view
    * @param main window
    * @return pointer to the createitem view
  */
	static CCreateItemViewPtr CreateCreItemView(IWindowDirector* parentWindow);
  /**
    * Create a new save view
    * @param main window
    * @return pointer to the save view
  */
	static CSaveViewPtr CreateSaveView(IWindowDirector* parentWindow);
  /**
    * Create a new about view
    * @param main window
    * @return pointer to the about view
  */
	static CAboutViewPtr CreateAboutView(IWindowDirector* parentWindow);
};
}
#endif // !defined(EA_78BFD28D_71A6_4fdc_8A75_16127FA8E713__INCLUDED_)
